
package com.gustozzi.distribucion.dao.impl;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import com.gustozzi.distribucion.dao.util.Constantes;
import com.gustozzi.distribucion.dao.SolicitudTransporteDAO;
import com.gustozzi.distribucion.dao.util.DataAccess;
import com.gustozzi.distribucion.dao.util.DataAccessExceptions;
import com.gustozzi.distribucion.dao.util.DataAccessGeneric;
import com.gustozzi.domain.CentroDistribucion;
import com.gustozzi.domain.Cliente;
import com.gustozzi.domain.Cobranza;
import com.gustozzi.domain.Despacho;
import com.gustozzi.domain.GuiaRemision;
import com.gustozzi.domain.Pedido;
import com.gustozzi.domain.Producto;
import com.gustozzi.domain.SolicitudTransporte;
import com.gustozzi.domain.Transporte;

public class SolicitudTransporteDAOImpl extends DataAccessGeneric implements SolicitudTransporteDAO
{

    public SolicitudTransporteDAOImpl(DataAccess transaccion)
    {
        super(transaccion);
    }

    @Override
    public List<SolicitudTransporte> obtenerListaSolicitudTransporte(int codigo, int centro, int despacho,
            String placa, Date fechaDesde, Date fechaHasta) throws DataAccessExceptions
    {

        Connection connection = null;
        CallableStatement cs = null;
        ResultSet rs = null;

        List<SolicitudTransporte> listaSolicitudTransporte = null;
        List<Transporte> listaTransporte = null;
        SolicitudTransporte beanSolicitudTransporte1 = null;
        Transporte trans = null;
        String codigoAnterior = "";
        try
        {
            connection = this.transaccion.getConnection();
            cs = connection.prepareCall(Constantes.SS_Solicitud_Transporte);
            cs.setInt(1, codigo);
            cs.setString(2, placa);
            cs.setInt(3, despacho);
            cs.setInt(4, centro);
            cs.setDate(5, fechaDesde);
            cs.setDate(6, fechaHasta);

            rs = cs.executeQuery();
            cs.execute();
            rs = cs.getResultSet();
            listaSolicitudTransporte = new ArrayList<SolicitudTransporte>();
            listaTransporte = new ArrayList<Transporte>();

            while (rs.next())
            {

                if (codigoAnterior.equalsIgnoreCase(""))
                {

                    beanSolicitudTransporte1 = new SolicitudTransporte();

                    beanSolicitudTransporte1.setCodigo(rs.getString(Constantes.PARAM_SOLICITUDTRANSPORTE));
                    beanSolicitudTransporte1.setFechaSolicitud(rs.getDate(Constantes.PARAM_FECHAREQUERIMIENTO));
                    beanSolicitudTransporte1.setFechaCreacion(rs.getDate(Constantes.PARAM_FEASIGNACION));
                    beanSolicitudTransporte1.setDescSolicitud(rs.getString("DsSolicitud"));

                    trans = new Transporte();
                    trans.setCodigoTransporte(rs.getString(Constantes.PARAM_COUNIDADTRANSPORTE));
                    trans.setPlaca(rs.getString(Constantes.PARAM_PLACA));
                    trans.setModelo(rs.getString(Constantes.PARAM_MODELO));
                    trans.setPeso(rs.getDouble(Constantes.PARAM_PESO));
                    listaTransporte.add(trans);

                    CentroDistribucion centroDistribucion = new CentroDistribucion();
                    centroDistribucion.setCodigo(rs.getString(Constantes.PARAM_COCENTRODISTRIBUCION));
                    centroDistribucion.setNombre(rs.getString(Constantes.PARAM_NOMCENTRODISTRIBUCION));
                    beanSolicitudTransporte1.setCentro(centroDistribucion);

                    GuiaRemision guia = new GuiaRemision();
                    guia.setCodigo(rs.getString(Constantes.PARAM_GUIAREMISION));
                    beanSolicitudTransporte1.setGuiaRemision(guia);
                    beanSolicitudTransporte1.setEstado(rs.getString(Constantes.PARAM_ESTADO));

                }

                else if (codigoAnterior.equalsIgnoreCase(rs.getString("CoSolicitudTransporte")))
                {

                    trans = new Transporte();
                    trans.setCodigoTransporte(rs.getString(Constantes.PARAM_COUNIDADTRANSPORTE));
                    trans.setPlaca(rs.getString(rs.getString(Constantes.PARAM_PLACA)));
                    trans.setModelo(rs.getString(rs.getString(Constantes.PARAM_MODELO)));
                    trans.setPeso(rs.getDouble(rs.getString(Constantes.PARAM_PESO)));
                    listaTransporte.add(trans);

                }

                else
                {
                    beanSolicitudTransporte1.setListaTransporte(listaTransporte);
                    listaSolicitudTransporte.add(beanSolicitudTransporte1);
                    listaTransporte = new ArrayList<Transporte>();

                    beanSolicitudTransporte1 = new SolicitudTransporte();

                    beanSolicitudTransporte1.setCodigo(rs.getString(Constantes.PARAM_SOLICITUDTRANSPORTE));
                    beanSolicitudTransporte1.setFechaSolicitud(rs.getDate(Constantes.PARAM_FECHAREQUERIMIENTO));
                    beanSolicitudTransporte1.setFechaCreacion(rs.getDate(Constantes.PARAM_FEASIGNACION));
                    beanSolicitudTransporte1.setDescSolicitud(rs.getString("DsSolicitud"));
                    trans = new Transporte();
                    trans.setCodigoTransporte(rs.getString(Constantes.PARAM_COUNIDADTRANSPORTE));
                    trans.setPlaca(rs.getString(Constantes.PARAM_PLACA));
                    trans.setModelo(rs.getString(Constantes.PARAM_MODELO));
                    trans.setPeso(rs.getDouble(Constantes.PARAM_PESO));
                    listaTransporte.add(trans);

                    CentroDistribucion centroDistribucion = new CentroDistribucion();
                    centroDistribucion.setCodigo(rs.getString(Constantes.PARAM_COCENTRODISTRIBUCION));
                    centroDistribucion.setNombre(rs.getString(Constantes.PARAM_NOMCENTRODISTRIBUCION));
                    beanSolicitudTransporte1.setCentro(centroDistribucion);

                    GuiaRemision guia = new GuiaRemision();
                    guia.setCodigo(rs.getString(Constantes.PARAM_GUIAREMISION));
                    beanSolicitudTransporte1.setGuiaRemision(guia);

                    trans = new Transporte();
                    trans.setCodigoTransporte(rs.getString(Constantes.PARAM_COUNIDADTRANSPORTE));
                    trans.setPlaca(rs.getString(Constantes.PARAM_PLACA));
                    trans.setModelo(rs.getString(Constantes.PARAM_MODELO));
                    trans.setPeso(rs.getDouble(Constantes.PARAM_PESO));
                    listaTransporte.add(trans);
                }
                codigoAnterior = rs.getString("CoSolicitudTransporte");

            }

            if (beanSolicitudTransporte1 != null)
            {
                beanSolicitudTransporte1.setListaTransporte(listaTransporte);
                listaSolicitudTransporte.add(beanSolicitudTransporte1);
            }
            rs.close();
            cs.close();
        }

        catch (Exception e)
        {
            throw new DataAccessExceptions(e);
        }
        return listaSolicitudTransporte;

    }

    public List<Transporte> obtenerListaTransporte(List<SolicitudTransporte> listaSolicitud, String codigoSolicitud)
    {

        List<Transporte> listaTransporte = new ArrayList<Transporte>();
        for (int x = 0; x < listaSolicitud.size(); x++)
        {

            if (listaSolicitud.get(x).getCodigo().equals(codigoSolicitud))
            {
                listaTransporte = listaSolicitud.get(x).getListaTransporte();
            }
        }

        return listaTransporte;

    }

    @Override
    public String eliminarSolicitud(int codigo) throws DataAccessExceptions

    {
        Connection connection = null;
        CallableStatement cs = null;
        String respuesta = "";
        try
        {
            connection = this.transaccion.getConnection();
            cs = connection.prepareCall(Constantes.SS_Delete_SolicitudTransporte);
            cs.setInt(1, codigo);
            int entero = cs.executeUpdate();
            connection.commit();

            if (entero >= 0)
            {
                respuesta = "OK";
            }
            else
            {
                respuesta = "ERROR";
            }
            cs.close();
            // connection.close();
        }
        catch (SQLException e)
        {
            try
            {
                cs.close();
            }
            catch (SQLException e1)
            {
                throw new DataAccessExceptions(e);
            }
            throw new DataAccessExceptions(e);
        }
        return respuesta;
    }

    @Override
    public String guardarSolicitudTransporte(int codigoSolicitudTransporte, String fechaCreacion, String desSolicitud,
            Double pesoMax, String fechaReq) throws DataAccessExceptions
    {

        Connection connection = null;
        CallableStatement cs = null;
        String respuesta = "";
        SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");
        Date fecCreacion = null;
        Date fecRequerimiento = null;
        try
        {
            System.out.println("FechaRequerimiento");
            fecCreacion = new Date(sdf.parse(fechaCreacion).getTime());
            connection = this.transaccion.getConnection();
            cs = connection.prepareCall(Constantes.SS_SolicitudInsert_Transporte);
            cs.setInt(1, codigoSolicitudTransporte);
            cs.setDate(2, fecCreacion);
            cs.setString(3, desSolicitud);
            cs.setDouble(4, pesoMax);
            cs.setDate(5, fecRequerimiento);

            int entero = cs.executeUpdate();
            if (entero == 0)
            {
                respuesta = "OK";
            }
            else
            {
                respuesta = "ERROR";
            }
            cs.close();
        }
        catch (SQLException e)
        {
            try
            {
                cs.close();
            }
            catch (SQLException e1)
            {
                throw new DataAccessExceptions(e);
            }
            throw new DataAccessExceptions(e);
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return respuesta;
    }

}
